import { Controller } from 'egg';
 
/**
 * @controller  es测试接口
 */
 export default class SearchController extends Controller {
    // 增加

     /**
     * @summary 创建用户
     * @description body案例：
     * @router post /add
     * * @request body addUse *body
     * @response 200 addUse 返回结果
     */
    async add(){
        const data=this.ctx.request.body
        console.log(data);
        
        // bulk方法  批量操作数据
        // body  消息体
        //index 新增数据
       let res=await this.app.elasticsearch.bulk({
        body:[
            { index: { _index: 'tert' } },//_index  索引名
            data  //要新增的数据
        ]
       })
       this.ctx.body=res
       console.log("增加返回值",JSON.parse(JSON.stringify(res)));
    }


    // 查询全部数据
    async searchAll() {
        /**
     * @summary 查找所有数据
     * @description path 案例
     * @router get /search
     * @response 200 createUserResponse
     */
        const data=this.ctx.query
        console.log(data);
        
     let res= await this.app.elasticsearch.search({
            index:"tert",
            body:{
                query:{
                    match_all: {}
                }
            }
        })
        console.log("搜索返回值", JSON.stringify(res));
        this.ctx.body=res
    }

    // 根据性别查询并且分页
    async genderSearch() {
        /**
     * @summary 查找用户
     * @description path 案例
     * @router get /condition
     * @request query number *pageIndex eg:1 当前页码
     * @request query number *pageSize eg:20 显示条数
     * @request query string name 名字
     * @request query number age 年龄
     * @request query string gender 性别
     * @response 200 
     */
     const {pageSize,pageIndex,gender}=this.ctx.request.query
      console.log(this.ctx.request.query);
    //   分页
      let shu=(parseInt(pageIndex)-1)*parseInt(pageSize)
     let res= await this.app.elasticsearch.search({
            index:"tert",
            body:{
                query: { match: {
                    gender:gender
                } },
                sort:[{ age: "asc"}],
                from: shu,
                size:pageSize
            }
            
        })
        console.log("搜索返回值", JSON.stringify(res));
        
        this.ctx.body={
            pageIndex,
            pageSize,
            res
        }
    }


     // 统计查询的平均年龄
     async getSearch() {
        /**
     * @summary 统计用户平均年龄
     * @description path 案例
     * @router get /getSearch
     * @request query string  年龄获取成绩
     * @response 200 
     */
    const data=this.ctx.request.query
    console.log(data);
    
     let res= await this.app.elasticsearch.search({
            index:"tert",
            size:0,
            body:{
                aggs:{
                    having:{ 
                        avg:{
                        field:"age"
                        }
                    }
                }
            }
            
        })
        console.log("搜索返回值", JSON.stringify(res));
        this.ctx.body=res
      
    }

    // 删除
    async delete() {
        /**
     * @summary 根据id删除用户
     * @description path 案例
     * @router delete /delete
     * @request query string id 用户ID
     * @response 200 createUserResponse
     */
        const {id}=this.ctx.request.query
        console.log(id);
            
        let result = await this.app.elasticsearch.bulk({
            body: [
                { delete: { _index: 'tert', _id: id } },
            ]
        });
        console.log('deleteResult: ', result);
        this.ctx.body =result ;
    }


     /**
     * @summary 根据id修改
     * @description formData 案例
     * @router put /update
     * @request query string id 用户ID
     * @request body addUse id 用户ID
     * @response 200 addUse
     */
      async update() {
        const { ctx } = this;
        const data = ctx.request.body;
        const { id } = ctx.request.query;
        console.log("data", data,id);
       let res= await this.app.elasticsearch.bulk({
        body: [
            { update: { _index: 'tert', _id: id } },
            {doc:data}
        ]

       })
       
        ctx.body = res
    }
}



